import os
import time
import csv

def menu():  #menu函数定义了一个菜单界面，使用无限循环来保持菜单的显示。
    while True:
        os.system('clear')   #清空命令行窗口的内容
        print('--------------------------')
        print('欢迎来的BMR计算器')
        print('--------------------------')
        try:
            choice = int(input('菜单栏\n 1-开始计算 \n 2-结束程序 \n 3-填写csv表头\n'))
            if choice in [1, 2]:      #判断选择是否为1或2，如果是，则返回选择
                return choice
            elif choice == 3:         #如果选择为3，打开一个文件 'BMR1 data.csv'，并将表头写入文件中
                with open('BMR1 data.csv', 'a+', newline='') as file:
                    writer = csv.writer(file)
                    writer.writerow(['性别', '身高', '年龄', '体重', 'BMR指数'])
                print('填写中（3秒后回到主菜单）')
            else:
                print('请输入正确的数字（3秒后回到主菜单）')
        except ValueError:  #用户输入不是整数，异常
            print('请输入正确的数字（3秒后回到主菜单）')
        time.sleep(3)


def main():                     #main()函数是程序的主要逻辑部分
    choice = menu()
    state = 'y'                 #y初始化状态为继续
    if choice == 1:
        while state == 'y':     #当状态为继续时，进入循环
            os.system('clear')
            try:
                user_input = input('请输入（男/女） 身高（cm/m） 年龄（岁） 体重（kg）--使用空格隔开：').split(' ')    #接收用户输入的数据，并使用空格分割为列表
                gender, height, age, weight = user_input[0], float(user_input[1]), int(user_input[2]), float(user_input[3])
                bmr = count(weight, height, age, gender)    #调用count()函数计算BMR指数
                print('BMR指数为:{:.2f}'.format(bmr))
                user_input.append(str(bmr))    #将BMR指数添加到用户输入的列表的末端
                list_start(user_input)         #调用list_start()函数将用户输入的数据写入CSV文件
                state = input('是否继续（y-程序继续，任意键退出）')
                print('--------------------------')
            except ValueError:
                print('请输入正确的格式')
                time.sleep(3)
            except PermissionError:
                print('请关闭csv表')
                time.sleep(3)


def count(weight, height, age, gender):   #count函数用于计算BMR指数
    if height >= 3:
        if gender == '男':
            return 66 + (13.7 * weight) + (5 * height) - (6.8 * age)
        elif gender == '女':
            return 655 + (9.6 * weight) + (1.8 * height) - (4.7 * age)
    elif height < 3:
        if gender == '男':
            return 66 + (13.7 * weight) + (500 * height) - (6.8 * age)
        elif gender == '女':
            return 655 + (9.6 * weight) + (180 * height) - (4.7 * age)


def list_start(data):               #list_start函数用于将数据写入CSV文件
    with open('BMR1 data.csv', 'a+', newline='') as file:
        writer = csv.writer(file)   #使用csv.writer(file)创建一个csv.writer对象，用于写入CSV文件
        writer.writerow(data)       #将数据写入CSV文件
        
if __name__ == '__main__':
    main()
